package superviseur.database;

import java.util.*;
import jcdatabase.*;

public class TPassword
{
    static JCTable passwords = null;
    static TPassword tPassword = null;

    private TPassword(String fichierPassword)
    {
	if (passwords == null)
	{
	    passwords = new JCTable(fichierPassword);
	}
	adminFirst();
    }

    public static TPassword getInstance(final String fichierPassword)
    {
	if (tPassword == null)
	{
	    tPassword = new TPassword(fichierPassword);
	}
	return tPassword;
    }

    public static TPassword getInstance()
    {
	return tPassword;
    }

    public void destroy()
    {
	passwords.destroy();
	passwords = null;
	tPassword = null;
    }


    public int getNombreAdmin()
    {
	JCRow[] r = passwords.select();
	return r.length;
    }

    public Vector getAllAdmin()
    {
	Vector result = new Vector();

	JCRow[] r = passwords.select();
	for (int i = 0; i < r.length; i++)
	{
	    Vector row = new Vector(3);
	    row.add(r[i].getString("LOGIN"));
	    row.add(r[i].getString("PASSWORD"));
	    row.add(new Integer(r[i].getInt("ADMIN")));
	    result.add(row);
	}
	return result;
    }

    private void adminFirst()
    {
	JCRow[] i = passwords.select("ADMIN", "=", 1);
	if (i.length == 0)
	{
	    addPassword("admin", "password", true);
	}
    }

    public boolean isAdmin(String login)
    {
	boolean result = false;
	JCRow[] r = passwords.select("LOGIN", "=", login);
	if ( (r.length == 1))
	{
	    result = (r[0].getInt("ADMIN") == 1);
	}
	return result;
    }

    public boolean isLoginExiste(String login, boolean admin)
    {
	boolean result = false;
	int intAdmin = admin? 1:0;
	JCRow[] i = passwords.select("LOGIN", "=", login);
	if (i.length == 1)
	{
	    result = (i[0].getInt("ADMIN") == intAdmin);
	}
	return result;
    }

    public void addPassword(String login, String password, boolean admin)
    {
	JCRow[] i = passwords.select("LOGIN", "=", login);
	if ( (i.length == 0))
	{
	    JCRow newRow = new JCRow(passwords);
	    newRow.setString("LOGIN", login);
	    newRow.setString("PASSWORD", password);
	    newRow.setInt("ADMIN", admin? 1:0);
	    passwords.insert(newRow);
	}
    }

    public void deleteAdmin()
    {
	//JCRow[] r = passwords.select("ADMIN", "=", 1);
	passwords.delete("ADMIN", "=", 1);
    }

    public void delete(String login)
    {
	passwords.delete("LOGIN", "=", login);
    }

    public boolean isValide(String login, String password, boolean admin)
    {
	boolean result = false;
	JCRow[] r = passwords.select("LOGIN", "=", login);
	if ( (r.length == 1))
	{
	    if (admin)
	    {
		result = (r[0].getString("PASSWORD").equals(password) & (r[0].getInt("ADMIN") == 1));
	    }
	    else
	    {
		result = (r[0].getString("PASSWORD").equals(password));
	    }
	}
	return result;
    }


    public void changePassword(String login, String password)
    {
	passwords.update("PASSWORD", password, "LOGIN", "=", login);
    }

    public String[] getColonnes()
    {
	String[] result = {"LOGIN", "PASSWORD", "ADMIN"};
	return result;
    }

    public String getTableName()
    {
	return "passwords";
    }

}